perm filename BOWLS.SAI[ALS,ALS]1 blob sn#174563 filedate 1975-08-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "BOWLS"
C00008 ENDMK
C⊗;
BEGIN "BOWLS"
DEFINE ⊂="BEGIN",⊃="END",$="COMMENT";
DEFINE \=" "; $ DEFINE \="SAFE";	$ Simple way to change to SAFE;

INTEGER ARRAY BUF[0:511];
INTEGER I,J,K,L,SCORE,EOF,BRCHR,CHAN1,CHAN2;
STRING READ1,READ2,READ3,READX;
BOOLEAN ER;

PROCEDURE NEWNAM;
⊂	"NEW"
	OUTSTR ("Type full name for record = ");
	READ1←INCHWL;
	READ1←READ1&"                    ";	$ Pad out with spaces;
	READX←READX&READ1[1 to 20];		$ Limit name to 4 words;
	OUTSTR ("Type Apartment number = ");
	READ2←INCHWL;
	IF READ2="" THEN READ2←"     " ELSE READ2←READ2&"    ";
	READX←READX&READ2[1 to 5];
	OUTSTR ("Type approximate rating = ");
	READ3←INCHWL;
	READ3←READ3&"     ";
	READX←READX&READ3[1 to 5];
⊃	"NEW";

PROCEDURE MKROOM;
⊂	FOR K←J STEP 8 UNTIL 511 DO IF BUF[K]=0 THEN DONE;
	FOR K←K-8 STEP -1 UNTIL J DO BUF[K+8]←BUF[K];
⊃	;

PROCEDURE NAME;
⊂	"NAME"
	WHILE TRUE DO "TLOOP"
 ⊂	OUTSTR ("Type NICKNAME = ");
	READX←INCHWL;
	IF READX="" THEN DONE "TLOOP";
	LENX←LENGTH(READX)
	FOR I←0 STEP 8 UNTIL 511 DO
  ⊂	"ILOOP"
	IF BUF[I]=0 THEN DONE "ILOOP";
	READ1←CVSTR(BUF[I])[1 FOR LENX];  J←I+8;  READ2←CVSTR(BUF[J])[1 FOR LENX];
	IF READX≤READ2 THEN
   ⊂	IF READX≥READ1 THEN
    ⊂	IF READ1=READ2 THEN
     ⊂	OUTSTR ("Ambiguous! type more letters ");  DONE "ILOOP";
     ⊃	;
	IF READX=READ1 THEN DONE "ILOOP";
	IF (READX>READ1)∧(READX<READ2) THEN
     ⊂	OUTSTR ("Is this a new nickname? (Y or N) ");
	IF INCHWL="Y" THEN
      ⊂	MKROOM;
	NEWNAME;

      ⊃	;
     ⊃	ELSE
     ⊂ 	FOR K←1 STEP 1 UNTIL LENX DO IF READX[K FOR 1]≠READ1[K FOR 1] THEN DONE;
	FOR L←1 STEP 1 UNTIL LENX DO IF READX[L FOR 1]≠READ2[L FOR 1] THEN DONE;
	IF K>L THEN
     ⊂	OUTSTR ("Do you mean "&READ1&" Y or N? ");
	IF INCHWL="Y" THEN
      ⊂	READX←READ1;
	DONE "NAME";
      ⊃	ELSE
      ⊂	OUTSTR ("Try again ");
	DONE "ILOOP";
      ⊃	;
     ⊃	;
	IF K<L THEN
     ⊂	OUTSTR ("Do you mean "&READ2&" Y or N? ");
	IF INCHWL="Y" THEN
      ⊂	READX←READ2;
	DONE "NAME";
      ⊃	ELSE
      ⊂	OUTSTR ("Try again ");
	DONE "ILOOP";
      ⊃	;
     ⊃	;
	IF K=L THEN
     ⊂	OUTSTR ("Ambiguous, type more letters");
	DONE "ILOOP";
     ⊃	;


    ⊃	;


   ⊃	;


  ⊃	;


 ⊃	;


⊃	;

    ⊂
     ⊃	ELSE IF J=L THEN
     	IF READX[J TO J] ≠"" THEN
      ⊂ OUTSTR ("Abbiguous, try again ");
	DONE "ILOOP";
      ⊃	ELSE
      ⊂ OUTSTR (Is this a new name Y or N? ");
	IF INCHWL="Y" THEN WHILE BUF[I]≠0 DO I←I+8;
      ⊃ ;
 ⊃;
⊃	"NAME";
Q
PROCEDURE CORRECTION;
⊂	"CORRECT"











	NAME;					$ Ask for nickname;
	IF READX="" THEN DONE;
⊃	"CORRECT";

PROCEDURE REPORT;
⊂	"REPORT"












⊃	"REPORT";

PROCEDURE GAME;
⊂	"GAME"













⊃	"GAME";

PROCEDURE NLIST;
⊂	"NLIST"












⊃	"NLIST";

PROCEDURE GLIST;
⊂	"GLIST"









⊃	"GLIST";

$ MAIN PROGRAM STARTS HERE;

CHAN1←1;	CHAN2←2;
CLOSE (CHAN1);	OPEN (CHAN1,"DSK",'10,2,0,0,0,EOF);
LOOKUP (CHAN1,"BOWLSD.DAT[ALS,ALS]",ER);
IF ER THEN OUTSTR ("BOWLD.DAT does not exist.") ELSE
ARRYIN(CHAN1,BUF[0],512);	CLOSE(CHAN1);


$ Main program loop starts here;

	WHILE TRUE DO
 ⊂	OUTSTR 
("Services available are:	0. Exit call.	1. Add game.	2. Add name.
	3. Make correction.	4. Ratings.	5. List names.	6. List games.
Type number for service requested = ")
	I←0;
	I←CVD(INCHWL);
	IF (I>6)∨(I≤0) THEN DONE "BOWLS";
	CASE I OF ⊂ DONE "BOWLS";GAME;NAME;CORRECT;RATE;NLIST;GLIST; ⊃ ;
 ⊃ ;
⊃ "BOWLS";